#include "boids.h"
#include <iostream>

BoidVec3d::BoidVec3d(BoidPosition3d& startPos, BoidPosition3d& endPos)
{
    x = endPos.x- startPos.x;
    y = endPos.y- startPos.y;
	z = endPos.z- startPos.z;

}

BoidVec3d::BoidVec3d(float a_x, float a_y, float a_z)
{

	x = a_x; y = a_y; z = a_z;
	
}

BoidVec3d BoidVec3d::operator +(BoidVec3d& a_vec)
{
	BoidVec3d temp(x,y,z);

	temp.x += a_vec.x;
	temp.y += a_vec.y;
	temp.z += a_vec.z;

	return temp;
}

BoidVec3d BoidVec3d::operator +=(BoidVec3d& a_vec)
{
	x += a_vec.x;
	y += a_vec.y;
	z += a_vec.z;

	return *this;
}

BoidVec3d BoidVec3d::operator /(float num)
{
	BoidVec3d temp(x,y,z);

	temp.x /= num;
	temp.y /= num;
	temp.z /= num;

	return temp;
}

BoidVec3d BoidVec3d::operator /=(float num)
{

	x /= num;
	y /= num;
	z /= num;

	return *this;
}

BoidVec3d BoidVec3d::operator -(BoidVec3d& a_vec)
{
	BoidVec3d temp(x,y,z);

	temp.x -= a_vec.x;
	temp.y -= a_vec.y;
	temp.z -= a_vec.z;

	return temp;
}

BoidVec3d BoidVec3d::operator -=(BoidVec3d& a_vec)
{
	x -= a_vec.x;
	y -= a_vec.y;
	z -= a_vec.z;

	return *this;
}
BoidVec3d BoidVec3d::operator *(float num)
{
	BoidVec3d temp(x,y,z);

	temp.x *= num;
	temp.y *= num;
	temp.z *= num;

	return temp;
}

BoidVec3d BoidVec3d::operator *=(float num)
{

	x *= num;
	y *= num;
	z *= num;

	return *this;
}

float BoidVec3d::length()
{
	return sqrt((x*x) + (y*y) + (z*z));
}

void BoidVec3d::normalize()
{
    float len = length();
    
    if (len != 0.0f)
    {
		x /= len;
		y /= len;
		z /= len;
    }
}

void BoidVec3d::printVec()
{
	std::cout<<x<<", "<<y<<", "<<z<<std::endl;


}